package middleware

import (
	"gitee.com/tang_q/gin-vue3-admin-api/global"
	"gitee.com/tang_q/gin-vue3-admin-api/utils"
	"github.com/gin-gonic/gin"
)

func RgPublic() gin.HandlerFunc {
	return func(context *gin.Context) {
		if context.Request.URL.Path != "/api/public/user/login" {
			// 验证token
			token := context.GetHeader("Authorization")
			if token == "" {
				context.AbortWithStatusJSON(403, gin.H{"error": "Unauthorized"})
				context.Abort()
				return
			}

			// 验证token是否有效
			cl, err := utils.ParseTokenHs256(token)
			if err != nil {
				context.AbortWithStatusJSON(401, gin.H{"error": "Unauthorized"})
				context.Abort()
				return
			}
			// 验证token是否在redis中
			exists, err := global.Redis.Exists(context, cl.ID).Result()
			if err != nil {
				context.AbortWithStatusJSON(500, gin.H{"error": err.Error()})
				context.Abort()
				return
			}
			if exists != 0 {
				context.AbortWithStatusJSON(401, gin.H{"error": "Unauthorized"})
				context.Abort()
				return
			}

			// 将用户信息保存到上下文中
			context.Set("loginName", cl.LoginName)

			context.Next()
		} else {
			context.Next()
		}
	}
}
